package custom;

public class CustomSearch {
    /**
     * 二分法查找(循环实现)
     *
     * @param array  被查找数组
     * @param number 查找数字
     * @return 返回与number相等元素的索引，若匹配不到，则返回-1
     */
    public static int binary(int[] array, int number) {
        int start = 0, end = array.length - 1, middle;
        do {
            middle = (start + end) / 2;
            if (array[middle] == number) return middle;
            else if (array[middle] < number) start = middle + 1;
            else end = middle - 1;
        } while (start <= end);
        return -1;
    }

    /**
     * 二分法查找(递归实现)
     *
     * @param array  被查找数组
     * @param left   查找区域的开始索引
     * @param right  查找区域的结束索引
     * @param number 查找数字
     * @return 返回与number相等元素的索引，若匹配不到，则返回-1
     */
    public static int binary(int[] array, int left, int right, int number) {
        if (left > right) return -1;
        int middle = (left + right) / 2;
        if (array[middle] == number) return middle;
        else if (array[middle] < number) return binary(array, middle + 1, right, number);
        else return binary(array, left, middle - 1, number);
    }

    /**
     * 二分法查找(递归实现)
     *
     * @param array  被查找数组
     * @param number 查找数字
     * @return 返回与number相等元素的索引，若匹配不到，则返回-1
     */
    public static int useBinary(int[] array, int number) {
        return binary(array, 0, array.length - 1, number);
    }
}
